package tedu.api.reflect;

import javax.naming.event.ObjectChangeListener;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 *  利用反射机制调用Person类中所有的无参且公开的方法
 *  提示:
 *  Method类上有一个方法:
 *  int getParameterCount()
 *  该方法用于获取当前方法对象所表示的方法有多少个参数
 */
public class Test1 {
    public static void main(String[] args) throws Exception {
        /*
            1:通过类对象获取本类定义的所有方法
            2:遍历每一个方法后先判断是否为无参方法
            3:对无参方法的method调用invoke执行这个方法
         */
        Class cls = Class.forName("tedu.api.reflect.Person");
        Object obj = cls.newInstance();

        Method[] methods = cls.getDeclaredMethods();
        for(Method m : methods){
            if(m.getParameterCount()==0 //判断是否无参
                    &&
                    m.getModifiers()== Modifier.PUBLIC){//判断此方法权限是否为PUBLIC
                m.invoke(obj);
            }
        }

    }
}
